<template>
    <div>
        <h1>人员列表</h1>
        <h4>人员列表中第一个人的姓名是：{{firstPersonName}}</h4>
        <input type="text" v-model="name" placeholder="请输入名字"/>
        <button @click="addPreson">添加</button>
        <button @click="addPersonQin">添加一个姓覃的人</button>
        <!-- 向服务器发起请求，逻辑写在actions中 -->
        <button @click="addPersonFromServer">从服务器随机获取一条信息，添加到人员列表~</button>
        <ul>
            <li v-for="persons in personList" :key="persons.id">
                姓名：{{persons.name}}
            </li>
        </ul>

        <!-- Person组件中使用了'Count组件'的'求和'数据，实现组件间数据共享 -->
        <h3 style="color:blue">Count组件的求和为：{{sum}}</h3>
    </div>
</template>

<script>
import {nanoid} from 'nanoid';

    export default {
        name:"Person",
        data(){
            return {
                name:'',
            }
        },
        computed:{
            // 模块化：引用store中state中存储的共享数据（不使用Map的写法，通过：this.$store.state.模块名.属性名 的方式拿到数据）
            personList(){
                return this.$store.state.personAbout.personList;
            },

            // 获取countAbout模块state中的书：'求和'
            sum(){
                return this.$store.state.countAbout.sum;
            },

            // 获取personAbout模块getters中的数据：'第一个人的名称'
            firstPersonName(){
                // 模块化中的getters存储的数据API格式为：模块名/属性名。
                /*
                    使用ES6语法调用：
                        因为getters的API包含了'/'，所以调用不能使用'geteers.xxx'的方式（包含特殊字符的API不能这样调用）
                        要使用ES6语法的中括号['API名称']才能正常调用：this.$store.getters['模块名/属性名']
                        （注：在不使用map的情况下需要这样调用）
                */
                return this.$store.getters['personAbout/firstPersonName'];
            },
        },
        methods:{
            // 添加人员信息
            addPreson(){
                if (this.name == '') return alert('输入信息不能为空');
                // 将人员信息封装成一个对象
                const Person = {
                    id:nanoid(),
                    name:this.name
                }
                // console.log(Person);
                this.name = '' // 清空输入框
                
                // 模块化：通知personAbout模块的actions中对应的方法执行操作：添加人员信息
                // 模块化actions引用语法（不使用map写法）：this.$store.dispatch('模块名称/要引用的action方法名' ,数据)
                this.$store.dispatch('personAbout/addPerson' ,Person);  
            },

            // 添加一个姓覃的人
            addPersonQin(){
                const Person = {
                    id:nanoid(),
                    name:this.name
                }
                this.name = '' // 清空输入框
                // 模块化actions引用语法（不使用map写法）：this.$store.dispatch('模块名称/要引用的action方法名' ,数据)
                this.$store.dispatch('personAbout/addPersonQin' ,Person); 
            },

            // 添加人员信息：从服务器随机获取一条信息，然后添加到人员列表
            addPersonFromServer(){
                // 模块化actions引用语法（不使用map写法）：this.$store.dispatch('模块名称/要引用的action方法名' ,数据)
                this.$store.dispatch('personAbout/addPersonFromServer'); 
            }
        },
        mounted(){
            // console.log(this.$store);
        }
    }
</script>

<style>

</style>